# ---------------------------------------------------------


# ---------------------------------------------------------
# Replace your julia version here!
#   R_path := /pkg/software_depot/app/r/4.1.1/rhel_7/bin/R
R_path := /usr/local/bin/R
STATA := /Applications/Stata/StataMP.app/Contents/MacOS/stata-mp
R_WITH_LIB := $(R_path) CMD BATCH --vanilla
# ---------------------------------------------------------


# ---------------------------------------------------------
# Makefile for replication files
init: setup-environment extract-empirics
all:  build-empirics
# only build-data or build-LR if you want to see how it's done. 
# It is based off data where noise has been added for deauthentication
# ---------------------------------------------------------


# ---------------------------------------------------------
# --- 
extract-empirics:
	$(call colorecho, "Extracting data into folders ...\n ") #" (zip files ~~are~~ were disguised as .txt for uploading)")
	tar -xf ./task_data/input/data_input.tar.gz -C ../
	tar -xf ./task_data/output/data_output.tar.gz -C ../
	tar -xf ./task_LR/input/data_input.tar.gz -C ../		
	tar -xf ./task_LR/output/data_output.tar.gz -C ../
	tar -xf ./task_empirics/input/data_input.tar.gz -C ../
	tar -xf ./task_empirics/output/data_output.tar.gz -C ../
	find . -type f -name "data_input.tar.gz" -delete
	find . -type f -name "data_output.tar.gz" -delete
	$(TIME-END)
	@echo

# ---------------------------------------------------------
# --- 
build-data: 
	$(call colorecho, "Building the data ...")
	mkdir -p task_data/output
	mkdir -p task_data/tmp
	# cd ./task_data; $(R_WITH_LIB) ./src/read_gen_bilateral.R  ./log/read_gen_bilateral.log.R # uncomment if you raw bbg files see folder org for details
	cd ./task_data; $(R_WITH_LIB) ./src/wide_to_long.R        ./log/wide_to_long.log.R
	cd ./task_data; $(R_WITH_LIB) ./src/treat_EIA_extension.R ./log/treat_EIA_extension.log.R
	cd ./task_data; $(STATA) -b do ./src/grav_gdp.do; mv grav_gdp.log log/grav_gdp.log.do
	cd ./task_data; $(STATA) -b do ./src/organize_pegs.do; mv organize_pegs.log log/organize_pegs.log.do
	cd ./task_data; $(STATA) -b do ./src/treat_imf_trade.do; mv treat_imf_trade.log log/treat_imf_trade.log.do
	$(TIME-END)
	@echo

# --- 
build-LR: 
	$(call colorecho, "Building the Lustig-Richmond bilateral measures ...")
	mkdir -p task_LR/output
	mkdir -p task_LR/output/tables
	cd ./task_LR; $(R_WITH_LIB) ./src/build_beta_LR_daily.R ./log/build_beta_LR_daily.log.R
	cd ./task_LR; $(R_WITH_LIB) ./src/PCA_base.R ./log/PCA_base.log.R
	cd ./task_LR; $(R_WITH_LIB) ./src/build_vol_systematic.R ./log/build_vol_systematic.log.R
	cd ./task_LR; $(R_WITH_LIB) ./src/build_beta_LR_daily_PCA.R ./log/build_beta_LR_daily_PCA.log.R
	cd ./task_LR; $(R_WITH_LIB) ./src/build_beta_LR_daily_PCA_resid.R ./log/build_beta_LR_daily_PCA_resid.log.R
	cd ./task_LR; $(STATA) -b do ./src/merge_betas_trade.do; mv merge_betas_trade.log log/merge_betas_trade.log.do
	cd ./task_LR; $(STATA) -b do ./src/descriptive.do; mv descriptive.log log/descriptive.log.do 
	cd ./task_LR; $(STATA) -b do ./src/plot_PCAs.do; mv plot_PCAs.log log/plot_PCAs.log.do
	$(TIME-END)
	@echo
# 	mv $(task_importCoM)/build_annual_data.log $(task_importCoM)/log/build_annual_data.log.do

# --- 
build-empirics: 
	$(call colorecho, "Running the empirical results ...")
	mkdir -p task_empirics/output	
	mkdir -p task_empirics/output/coef_for_plots
	mkdir -p task_empirics/output/figures
	mkdir -p task_empirics/output/tables
	mkdir -p task_empirics/tmp
	cd ./task_empirics; $(STATA) -b do ./src/reg_event_trade.do; mv reg_event_trade.log log/reg_event_trade.log.do
	cd ./task_empirics; $(STATA) -b do ./src/reg_event_DD_FTA.do; mv reg_event_DD_FTA.log log/reg_event_DD_FTA.log.do
	cd ./task_empirics; $(STATA) -b do ./src/reg_event_DD_FTA_PCA.do; mv reg_event_DD_FTA_PCA.log log/reg_event_DD_FTA_PCA.log.do
	cd ./task_empirics; $(STATA) -b do ./src/reg_event_DD_dealtypes.do; mv reg_event_DD_dealtypes.log log/reg_event_DD_dealtypes.log.do
	cd ./task_empirics; $(R_WITH_LIB) ./src/build_reg_data.R  ./log/build_reg_data.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/build_reg_data_PCA.R  ./log/build_reg_data_PCA.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/IV_regs.R  ./log/IV_regs.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/IV_regs_PCA.R ./log/IV_regs_PCA.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/IV_regs_centrality.R ./log/IV_regs_centrality.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/IV_regs_bilateral.R ./log/IV_regs_bilateral.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/IV_regs_bilateral_NOPEGCH.R ./log/IV_regs_bilateral_NOPEGCH.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/write_table_DD_FTA.R      ./log/write_table_DD_FTA.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/write_table_DD_FTA_PCA.R ./log/write_table_DD_FTA_PCA.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/plot_FTA_events.R           ./log/plot_FTA_events.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/plot_FTA_events_dealtypes.R ./log/plot_FTA_events_dealtypes.log.R
	cd ./task_empirics; $(R_WITH_LIB) ./src/reg_event_DD_CS_FTA.R      ./log/reg_event_DD_CS_FTA.log.R
	cd ./task_empirics; rm Rplots.pdf
	$(TIME-END)
	@echo
# ---------------------------------------------------------


# ---------------------------------------------------------
setup-environment:
	$(call colorecho, "Setting up R environment (installing packages) ...")
	$(R_WITH_LIB) ./setup-environment.R ./setup-environment.log.R
	rm setup-environment.log.R
	$(STATA) -b ./setup-environment.do
	rm setup-environment.log
	$(TIME-END)
	@echo

clean-log:
	$(call colorecho, "Cleaning logs...")
	rm -f task_data/log/*
	rm -f task_LR/log/*
	rm -f task_empirics/log/*
	@echo

clean-output:
	$(call colorecho, "Cleaning outputs ...")
	rm -rf task_data/tmp
	rm -rf task_data/output/*
	rm -rf task_empirics/output/*
	rm -rf task_empirics/tmp
	rm -rf task_LR/output/*
	@echo

clean-zip:
	$(call colorecho, "Cleaning expanded files (unzipped) ...")
	@echo
# ---------------------------------------------------------


# ---------------------------------------------------------
# HOMEMADE SCRIPTS
define colorecho
      @tput setaf 6
      @echo $1
      @tput sgr0
endef
WHITE='\033[1;37m'
NC   ='\033[0m' # No Color

 # Timing: see here https://stackoverflow.com/questions/8483149/gnu-make-timing-a-build-is-it-possible-to-have-a-target-whose-recipe-executes
 TIME_START := $(shell date +%s)
 define TIME-END
 	@time_end=`date +%s` ; time_exec=`awk -v "TS=${TIME_START}" -v "TE=$$time_end" 'BEGIN{TD=TE-TS;printf "%02dm:%02ds\n", TD/(60),TD%60}'` ; echo \\t${WHITE}cumulative time elapsed ... $${time_exec} ... $@ ${NC}
endef
# ---------------------------------------------------------
